package main.leetcode.competition.weeklycomp.competition181;

/**
 * 5178.四因数
 *
 * <p>给你一个整数数组 nums，请你返回该数组中恰有四个因数的这些整数的各因数之和。
 *
 * <p>如果数组中不存在满足题意的整数，则返回 0 。
 *
 * <p>示例：输入：nums = [21,4,7] 输出：32 解释： 21 有 4 个因数：1, 3, 7, 21 4 有 3 个因数：1, 2, 4 7 有 2 个因数：1, 7 答案仅为
 * 21 的所有因数的和。
 *
 * <p>提示：1 <= nums.length <= 10^4 1 <= nums[i] <= 10^5
 */
public class Solution2 {
    public static void main(String[] args) {
        System.out.println(
                new Solution2().sumFourDivisors(new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}));
    }

    public int sumFourDivisors(int[] nums) {
        int res = 0, tmp, count, sum;
        for (int val : nums) {
            if (val > 5) {
                tmp = (int) Math.sqrt(val);
                count = 2;
                sum = 1 + val;
                for (int i = 2; i <= tmp; i++) {
                    if (val % i == 0) {
                        count += i == val / i ? 1 : 2;
                        sum += i + val / i;
                    }
                }
                if (count == 4) res += sum;
            }
        }
        return res;
    }
}
